#include "gcodeparse.h"
#include <QDebug>
GcodeParse::GcodeParse()
{

}

int GcodeParse::parseCode(QString lineStr, E_GCODE_TYPE &typeOut, QVector<double> &poseInOut)
{
    // 遍历所有行
    QRegExp rx("\\S*\\s*G(\\d*).*");
    QRegExp rx_pValue;

    qDebug()<<"thisLine:"<<lineStr;
    bool isMatch=rx.exactMatch(lineStr);
    if(false==isMatch )
    {
        qDebug()<<"unknow非Ｇ 指令"<<lineStr;
        return 0;
    }

    switch (rx.cap(1).toInt())
    {
    case 0://G0
    {
        typeOut=E_GCODE_G00;
        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*X(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[0]=rx_pValue.cap(1).toDouble();
        }

        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*Y(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[1]=rx_pValue.cap(1).toDouble();
        }

        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*Z(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[2]=rx_pValue.cap(1).toDouble();
        }


    }
        break;
    case 1://G1
    {
        typeOut=E_GCODE_G01;
        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*X(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[0]=rx_pValue.cap(1).toDouble();
        }

        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*Y(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[1]=rx_pValue.cap(1).toDouble();
        }

        rx_pValue.setPattern("\\S*\\s*G\\d*\\s.*Z(\\+?-?\\d*.?\\d*).*");
        isMatch=rx_pValue.exactMatch(lineStr);
        if(isMatch )
        {
            poseInOut[2]=rx_pValue.cap(1).toDouble();
        }

    }
    break;
    default:
    {
        qDebug()<<"不支持　Ｇ 指令"<<lineStr;
        return 0;
    }
    break;
    }
    return 1;
}
